﻿using famails.bus;
using famails.common;
using famails.dto;
using FAMailUtils.MailGun;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Mail;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails
{
    public partial class Register : System.Web.UI.Page
    {
        RegisterBUS dk;
        protected string packageFee;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadData();
                LoadPackageTime();
                lbthoigian.Text = DateTime.Now.ToString("dd/MM/yyyy:hh:mm:ss");
            }
        }
        private void LoadData()
        {
            if (Request.QueryString["packageId"] != null)
            {
                int packageid = Convert.ToInt32(Request.QueryString["packageId"]);
                dk = new RegisterBUS();
                DataTable dt = dk.GetByUserId(packageid);
                foreach (DataRow dr in dt.Rows)
                {
                    lblTenGoi.Text = dr["packageName"].ToString();
                    packageFee = dr["totalFee"].ToString();
                    lblCost.Text = packageFee; ;
                    lbtotalfree.Text = dt.Rows[0]["totalFee"].ToString();

                }
            }
        }
        private void LoadPackageTime()
        {
            //if (Session["LoadDropdownlist"] != null)
            //{
            SqlCommand cmd = new SqlCommand("Select * from tblPackageTime order by monthCount", ConnectionData._MyConnection);
            cmd.CommandType = CommandType.Text;
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable table = new DataTable();
            ConnectionData._MyConnection.Close();
            if (ConnectionData._MyConnection.State == ConnectionState.Closed)
            {
                ConnectionData._MyConnection.Open();
            }
            adapter.Fill(table);
            cmd.Dispose();
            adapter.Dispose();
            DataTable dtTemp = new DataTable();
            DataRow drTemp;
            dtTemp.Columns.Add("monthCount", typeof(String));
            dtTemp.Columns.Add("packageTimeId", typeof(String));
            dtTemp.Columns.Add("PackageTimeName", typeof(String));
            foreach (DataRow dr in table.Rows)
            {
                drTemp = dtTemp.NewRow();
                drTemp["monthCount"] = dr["monthCount"].ToString();
                drTemp["packageTimeId"] = dr["packageTimeId"] + "-" + dr["discount"] + "-" + dr["monthcount"];
                drTemp["PackageTimeName"] = dr["monthCount"].ToString() + " tháng";
                dtTemp.Rows.Add(drTemp);
            }
            ddlPackageTime.DataSource = dtTemp;
            ddlPackageTime.DataTextField = "PackageTimeName";
            ddlPackageTime.DataValueField = "packageTimeId";
            ddlPackageTime.DataBind();
            //    Session["LoadDropdownlist"] = "Loaded";
            //}
        }
        private double tinhtien()
        {
            double sum = 0;
            try
            {
                int discount = Convert.ToInt32(ddlPackageTime.SelectedValue.Split('-')[1]);
                int monthcount = Convert.ToInt32(ddlPackageTime.SelectedValue.Split('-')[2]);
                double fee = Convert.ToDouble(lbtotalfree.Text);
               sum = ((fee - (fee * discount) / 100) * monthcount);
            }
            catch (Exception ex) { common.Common.logs("register - tinhtien", ex, Common.logType.error); }
            return sum;
        }
        public static string GetMd5Hash(string input)
        {
            MD5 md5Hash = MD5.Create();
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            return sBuilder.ToString();
        }
        private ClientDTO getclient()
        {
            ClientDTO client = new ClientDTO();
            client.ClientName = txtUserName.Text;
            client.Address = txtDiaChi.Text;
            client.Email = txtEmail.Text;
            client.Phone = txtPhone.Text;
            return client;
        }
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int fee = 0;
            if (Request.QueryString["packageId"] != null)
            {
                int packageid = Convert.ToInt32(Request.QueryString["packageId"]);
                dk = new RegisterBUS();
                DataTable dt = dk.GetByUserId(packageid);
                foreach (DataRow dr in dt.Rows)
                {
                    fee = Convert.ToInt32(dr["totalFee"].ToString());

                }
            }

            double LastFee = tinhtien();
            lblCost.Text = LastFee.ToString();
        }
        protected void btnRegis_Click(object sender, EventArgs e)
        {
            string idpackage = Request.QueryString["packageId"].ToString();
            try
            {
                dk = new RegisterBUS();
                string mess = check();
                if (mess == "")
                {

                    ClientDTO cliendto = getclient();
                    ConnectionData.OpenMyConnection();
                    clientRegisterdto clientRegister = new clientRegisterdto();
                    clientRegister.from = DateTime.Now;
                    clientRegister.to = DateTime.Now.AddMonths(Convert.ToInt32(ddlPackageTime.SelectedValue.Split('-')[2]));

                    int id = 0;
                    Int32.TryParse(idpackage, out id);
                    clientRegister.packageId = id;

                    DataTable T = dk.GetPackageById(id);
                    bool dungthu = false;
                    if (T != null && T.Rows.Count > 0)
                    {
                        clientRegister.totalFee = Convert.ToDouble(lblCost.Text.Replace("$",""));
                        clientRegister.FeePerDay = Math.Round(Convert.ToDouble(lblCost.Text.Replace("$", ""))/(DateTime.Now.Date.AddMonths(Convert.ToInt32(ddlPackageTime.SelectedValue.Split('-')[2]))-DateTime.Now.Date).Days,3);
                        clientRegister.subAccontCount = Convert.ToInt32(T.Rows[0]["subAccontCount"]);
                        clientRegister.emailCount = Convert.ToInt32(T.Rows[0]["emailCount"]);
                        clientRegister.limitId = Convert.ToInt32(T.Rows[0]["limitId"]);
                        dungthu = Convert.ToBoolean(T.Rows[0]["istry"]);
                    }
                    object temp = dk.Getpackagetime();
                    Int32.TryParse(temp + "", out id);
                    clientRegister.packageTimeId = id;

                    UserLoginDTO ulDto = new UserLoginDTO();
                    ulDto.Username = txtUserName.Text;
                    ulDto.Password = GetMd5Hash(txtPass.Text);
                    ulDto.Email = txtEmail.Text;
                    ulDto.Is_Block = false;
                    ulDto.DepartmentId = (int)common.Common.DepartmentId.Client;
                    ulDto.UserType = (int)common.Common.clientStatus.InActive;
                    if (dk.Insert_client(ref cliendto, clientRegister, ulDto) > 0)
                    {
                        string from = ConfigurationManager.AppSettings["SystemRegisterEmail"].ToString();
                        string to = cliendto.Email;
                        string Subject = "Thư xác nhận";
                        string Body = @"<html>
                                    <body>
                                    Chào " + txtUserName.Text + @" thân mến!
                                    <br/>
                                    <br/>
                                    Xin chúc mừng! Bạn đã đăng ký thành công gói " + lblTenGoi.Text + @" của FaMails.com
                                    <br/><br/>
                                    Để sử dụng dịch vụ, tiếp cận hàng ngàn khách hàng trực tuyến của bạn:<br/><br/>";
                        if (dungthu)
                            Body += "1. Kích hoạt vào tài khoản của bạn <a href='http://famails.com/backend/page/accountactive.aspx?id=" + cliendto.ClientId + "' style='color: black;'>http://famails.com/backend/page/accountactive.aspx</a><br/>";
                        else Body += "1. Vui lòng liên hệ với chúng tôi theo Email: suppor@famails.com để được hướng dẫn kích hoạt tài khoản.<br/>";
                        Body += @"2. Sau khi đã kích hoạt, bạn có thể tạo chiến dịch đầu tiên, thiết lập chiến dịch chỉ mất một vài phút và bao gồm các bước đơn giản:<br/>
                                    -Cấu hình Email gửi<br/>
                                    -Tạo nhóm Email và Import nhóm Email từ File Excel<br/>
                                    -Tạo nội dung gửi<br/><br/>
                                    Nếu bạn cần giúp đỡ để thiết lập chiến dịch Email:suppor@famails.com.<br/><br/>
                                    Chúng tôi vui mừng chào đón bạn đến với FaMails.com<br/><br/>
                                    Nhóm phát triển FaMails.com
                                    </body>
                                    </html>";
                        SendMail sendmail = new SendMail(ConfigurationManager.AppSettings["api-key"]);
                        SendResult result = sendmail.SendHtmlMessage(from.Split('@')[1] + "", "Hệ thống FAMails.com", from, to, Subject, Body, false);

                        //DataTable auto = dk.GetAutoMailConfirm();
                        //if (T != null && T.Rows.Count > 0)
                        //{
                        //    string Body = auto.Rows[0]["Body"] + "";
                        //    string Subject = auto.Rows[0]["Subject"] + "";
                        //    Body = Body.Replace("[NAME]", txtUserName.Text);
                        //    Body = Body.Replace("[PACKAGE]", lblTenGoi.Text);
                        //    Body = Body.Replace("[SITEURL]", ConfigurationManager.AppSettings["site"]);
                        //    Body = Body.Replace("[MAIL]", txtEmail.Text);
                        //    Body = Body.Replace("[ID]", cliendto.ClientId+"");

                        //    SendMail sendmail = new SendMail(ConfigurationManager.AppSettings["api-key"]);
                        //    SendResult result = sendmail.SendHtmlMessage(from.Split('@')[1] + "", "Hệ thống FAMails.com", from, to, Subject, Body, false);
                        //}
                    }
                    Response.Redirect("success.aspx?id=" + idpackage, false);
                    Session["username"] = txtUserName.Text;
                }
                else
                {
                    lblError.Text = mess;
                    lblError.ForeColor = System.Drawing.Color.Red;
                }
            }
            catch (Exception ex) { common.Common.logs("register - btnRegis_Click", ex, Common.logType.error); }
        }
        private bool checkemail(string Email)
        {
            dk = new RegisterBUS();
            DataTable data = dk.kiemtramail(Email);
            if (data.Rows.Count > 0)
            {
                return true;
            }
            return false;
        }
        private string check()
        {
            string tenkh = null;
            string email = null;
            string password = null;
            string confilmPass = null;
            string Phone = null;
            string address = null;
            string captcha = null;
            tenkh = this.txtUserName.Text;
            email = this.txtEmail.Text;
            password = this.txtPass.Text.ToString().Trim();
            confilmPass = this.txtConfirmPass.Text.ToString().Trim();
            Phone = this.txtPhone.Text;
            address = this.txtDiaChi.Text;
            captcha = this.txtCapt.Text;
            if (tenkh == "" || tenkh == null)
            {
                this.txtUserName.Focus();
                return "Bạn chưa nhập tên";
            }
            else if (password == "" || password == null)
            {
                this.txtPass.Focus();
                return "Bạn chưa nhập mật khẩu";
            }
            else if (confilmPass == "" || confilmPass == null)
            {
                this.txtConfirmPass.Focus();
                return "Bạn chưa xác nhận lại mật khẩu";
            }
            else if (password.Equals(confilmPass) == false)
            {
                this.txtConfirmPass.Focus(); ;
                return "Hai mật khẩu không trùng nhau!";

            }
            else if (email == "" || email == null)
            {
                this.txtEmail.Focus();
                return "Bạn chưa nhập Email";
            }
            else if (address == "" || address == null)
            {
                this.txtDiaChi.Focus();
                return "Bạn chưa nhập địa chỉ";
            }
            else if (Phone == "" || Phone == null)
            {
                this.txtPhone.Focus();
                return "Bạn chưa nhập số điện thoại";
            }
            else if (captcha == "" || captcha == null)
            {
                this.txtCapt.Focus();
                return "Bạn chưa nhập vào mã captcha";
            }
            else if (IsValidMail(email) == false)
            {
                this.txtEmail.Focus();
                return "Bạn email của bạn không đúng định dạng";
            }
            else if (IsItNumber(Phone) == false)
            {
                this.txtPhone.Focus();
                return "Bạn nhập số điện thoại không đúng định dạng";
            }

            else if (checkemail(txtEmail.Text))
            {
                return "Tên " + txtEmail.Text + " này đã tồn tại trong hệ thống  ";
            }
            else
            {
                return "";
            }
        }
        public bool IsValidMail(string emailaddress)
        {
            try
            {
                MailAddress m = new MailAddress(emailaddress);
                return true;
            }
            catch (FormatException)
            {
                return false;
            }
        }
        public bool IsItNumber(string inputvalue)
        {
            Regex isnumber = new Regex("[^0-9]");
            return !isnumber.IsMatch(inputvalue);
        }
    }
}